櫻坂 46 と欅坂 46 のブログ記事をスクレイピング・保存・検索できるツールです。画像の自動ダウンロード機能付き。
データベースファイル: sakurazaka_blog.db
members(櫻坂 46 現役メンバー情報)
- id: メンバーID (例: 47)
- name: メンバー名 (例: 森田ひかる)
- blog_url: 櫻坂46 公式ブログURL
blog_posts(ブログ記事)
- id: 記事ID(自動採番)
- member_id: メンバーID (外部キー)
- member_name: メンバー名
- url: 元ブログURL (一意)
- title: 記事タイトル
- date: 投稿日
- content: 記事本文
- site: サイト識別子 ('sakurazaka46' または 'keyakizaka46')
- created_at: 保存日時
blog_images(記事画像)
- id: 画像ID(自動採番)
- post_id: 記事ID (外部キー)
- image_url: 元画像URL
- local_path: ローカル保存パス
images/
├── 森田ひかる_sakurazaka46/
├── 森田ひかる_keyakizaka46/
├── 小田倉麗奈_sakurazaka46/
├── 村山美羽_sakurazaka46/
└── ...
{メンバー名}_{サイト識別子}post_{投稿ID}_{ハッシュ}.jpgsakurazaka46 または keyakizaka46# CLIモードで起動
npm start
# または直接実行
node index.js
メニュー一覧:
🌐 Open member blog in browser
💾 Scrape and save sakurazaka46 blog posts(櫻坂 46)
a) メンバー選択 → 33名から選択
b) 記事数入力 → 1-100 または "all"
c) 画像DL選択 → y/n
d) 自動実行開始 → レート制限付きで安全にスクレイピング
🌳 Scrape Keyakizaka46 blog posts(欅坂 46)
a) 欅坂46メンバー選択 → 現櫻坂46メンバーの欅坂時代から選択(27名)
b) 記事数入力 → 1-100 または "all"
c) 画像DL選択 → y/n
d) 自動実行開始 → 欅坂46サイトから記事をスクレイピング
対応メンバー例:
- 菅井友香、渡邉理佐、守屋茜、森田ひかるなど
- site識別子は "keyakizaka46" として保存
🔍 Search saved blog posts
🌐 Web ページビューアーを起動
❌ Exit
npm start
ブラウザで http://localhost:3000 にアクセス
操作方法:
📊 統合表示: 櫻坂 46・欅坂 46 の記事を統合表示(サイトラベル付き)
🔍 検索画面(2 段階):
📊 表示モード切り替え:
👥 メンバー管理:
スクレイピング時の自動制御:
# 保存済み記事数を確認
node -e "const db = require('./database'); const d = new db(); d.getAllBlogPosts().then(posts => console.log(\`記事数: \${posts.length}\`));"
# 画像統計を確認
node -e "const {getImageStatsOptimized} = require('./imageDownloader'); console.log(getImageStatsOptimized());"
$ node index.js
=== Sakurazaka46 Blog Tool ===
? What would you like to do? 💾 Scrape and save sakurazaka46 blog posts
? Select a member: 森田ひかる (ID: 47)
? スクレイピングする記事数を入力("all"で全件): 3
? 画像をダウンロードしますか? Yes
森田ひかるさんのブログ記事を3件スクレイピング中...
🚀 スクレイピング開始 - 適切な間隔で処理します
📊 3件の投稿を処理します
📄 [1/3] タイトル1
📄 [2/3] タイトル2
📄 [3/3] タイトル3
✨ スクレイピング完了: 3件 (1103.7秒)
📊 平均処理時間: 367.9秒/件
✓ Scraped 3 posts
Saving to database...
✓ データベースに保存しました
📷 画像をダウンロード中...
📦 キャッシュ使用: post_12345_a1b2c3d4.jpg
📥 ダウンロード開始: image001.jpg
✅ 保存完了: post_12346_b2c3d4e5.jpg (245.3KB)
進捗: 1/3 完了
・・・
✨ ダウンロード完了: 3/3 成功
index.js - メインの CLI インターフェースwebServer.js - Express.js サーバー(ページング機能付き)fetchMembers.js - メンバーリスト取得blogScraper.js - 櫻坂 46 ブログスクレイピングkeyakiBlogScraper.js - 欅坂 46 ブログスクレイピングimageDownloader.js - 画像ダウンロード・最適化database.js - SQLite データベース操作(サイト識別対応)views/ - EJS テンプレートpublic/ - 静的ファイル(CSS 等).gitignore - キャッシュファイル除外設定井上梨名、武元唯衣、田村保乃、藤吉夏鈴、松田里奈、森田ひかる、山﨑天、 遠藤光莉、大園玲、大沼晶保、幸阪茉里乃、増本綺良、守屋麗奈、石森璃花、 遠藤理子、小田倉麗奈、小島凪紗、谷口愛季、中嶋優月、的野美青、向井純葉、 村井優、村山美羽、山下瞳月、浅井恋乃未、稲熊ひな、勝又春、佐藤愛桜、 中川智尋、松本和子、目黒陽色、山川宇衣、山田桃実
上村莉菜、尾関梨香、小池美波、小林由依、齋藤冬優花、佐藤詩織、菅井友香、 土生瑞穂、原田葵、守屋茜、渡辺梨加、渡邉理佐、井上梨名、関有美子、武元唯衣、 田村保乃、藤吉夏鈴、松田里奈、松平璃子、森田ひかる、山﨑天、遠藤光莉、大園玲、 大沼晶保、幸阪茉里乃、増本綺良、守屋麗奈
注: 欅坂 46 メンバーは現在の櫻坂 46 メンバーの中から、欅坂 46 時代に活動していたメンバーのみが対象です。
Current Version: v1.0.0
npx playwright install chromiumを再実行images/フォルダの権限を確認🚨 「データベースエラー」が表示された場合:
安全な方法(推奨):
# バックアップを作成
cp sakurazaka_blog.db sakurazaka_blog_backup.db
# 問題のあるDBを削除
rm sakurazaka_blog.db
# プログラム再起動(自動でDB再作成)
npm start
ファイルシステム を使用:
~/sakurazaka-blog-archive/フォルダを開くsakurazaka_blog.dbを右クリック → ゴミ箱に入れる❓ データベースリセットの影響:
削除ボタン(🗑️)をクリックした場合:
images/フォルダ内)は残存画像ファイルを完全削除したい場合:
# 特定メンバーの画像フォルダを削除
rm -rf images/森田ひかる_sakurazaka46
# または全画像削除
rm -rf images/*
SQLite でデータベースの中身を確認:
# 記事数確認
sqlite3 sakurazaka_blog.db "SELECT COUNT(*) FROM blog_posts;"
# メンバー一覧
sqlite3 sakurazaka_blog.db "SELECT * FROM members;"
# 特定メンバーの記事数
sqlite3 sakurazaka_blog.db "SELECT member_name, COUNT(*) FROM blog_posts GROUP BY member_id;"